//
// Created by tys on 2018/2/9.
//

#ifndef SAFEAPP_ED_AES_C_H
#define SAFEAPP_ED_AES_C_H
#define DEFAULT_PW "abcdefghijklmnop"
/**
 * 加密
 * 加密方式 128-ecb
 * 填充方式 pkcs5padding
 * @param cipherText  密文
 * @param cipherTextLen  密文长度
 * @param plaintext 明文
 * @param plaintextLen 明文长度
 * @param key
 * @param iv
 * @return 0 failed, other success
 */
int aes_ecb_encrypt(unsigned char *cipherText, int *cipherTextLen, const unsigned char *plaintext,
                     int plaintextLen,
                     const unsigned char *key,
                     const unsigned char *iv);

/**
 * 解密
 * 加密方式 128-ecb
 * 填充方式 pkcs5padding
 * @param plaintext
 * @param plaintextLen
 * @param cipherText
 * @param cipherTextLen
 * @param key
 * @param iv
 * @return 0 failed, other success
 */
int aes_ecb_decrypt(unsigned char *plaintext, int *plaintextLen, const unsigned char *cipherText,
                     int cipherTextLen,
                     const unsigned char *key,
                     const unsigned char *iv);

/**
 * 文件加密，内部分成多个buf多次加密合成，所以必须和decryptFile配套使用
 * 小文件时，可以整个文件一个buf,在用aes_ecb_decrypt加密即：，不必使用此方法。
 * @param cipherFile 加密后文件
 * @param plaintFile 要加密的文件
 * @return 加密buf后对应密文的长度
 */
int encryptBigFile(const char *cipherFile, const char *plaintFile,
                   const unsigned char *key,
                   const unsigned char *iv);

/**
 * 文件解密(和encryptFile配套使用)
 * @param plaintFile 解密后的文件
 * @param cipherFile 要解密的文件
 * @param readBufSize 加密时的返回值
 */
void decryptBigFile(const char *plaintFile, const char *cipherFile, int readBufSize,
                    const unsigned char *key,
                    const unsigned char *iv);

/**
 * 文件加密(整个文件读入内存，整体加密)
 * @param cipherFile
 * @param plaintFile
 * @param key
 * @param iv
 * @return 0 failed, other success
 */
int encryptFile(const char *cipherFile, const char *plaintFile,
                 const unsigned char *key, const unsigned char *iv);

/**
 * 文件解密(整个文件读入内存，整体解密)
 * @param plaintFile
 * @param cipherFile
 * @param key
 * @param iv
 * @return 0 failed, other success
 */
int decryptFile(const char *plaintFile, const char *cipherFile,
                 const unsigned char *key, const unsigned char *iv);

void byte2Hex(char *hex, char *bytes, int byteLen);

void hex2Byte(char *byte, char *hex, int hexLen);

#endif //SAFEAPP_ED_AES_C_H
